www.gusucode.com > TinyShop PHP开源商城系统 v1.0.3PHP源码程序 > TinyShop PHP开源商城系统 v1.0.3/TinyShop_v1.0.3/TinyShop_v1.0.3/static/js/common.js
//String.format 同时匹配[](){}内容方式 if (!String.prototype.format) { String.prototype.format = function () { var args = arguments; var tag = ''; return this.replace(/(\{|\(|\[)(\d+)(\}|\)|\])/g, function (match, m0,m1,m2) { tag = m0+m2; if(tag=='()' || tag == '{}' || tag == '[]') return typeof args[m1] != 'undefined'? args[m1]: (m0+m1+m2); }); }; } function url(str){ if(str==undefined) str = ''; str = str.replace(/(^\/*)|(\/*$)/g,""); var option = str.split('/'); var url = server_url.replace('__con__',option[0]); url = url.replace('__act__',option[1]==undefined?'':option[1]); var param = ''; if(option.length>2){ if(server_url.indexOf('?')!=-1){ for(i=3;i<option.length;i=i+2) { param += '&'+option[i-1]+'='+option[i]; } } else{ for(i=3;i<option.length;i=i+2) { param += '/'+option[i-1]+'/'+option[i]; } } } return url+param; } //tab插件 function tabs_init(){ $(".tab").each(function(j){ var that = $(this); that.attr("index",0); $(">.tab-head >*",that).each(function(i){ var index = i; if(i!=0)$(this).removeClass('current'); else $(this).addClass('current'); $(">.tab-body > *",that).css({display:'none'}); $(">.tab-body > *:eq(0)",that).css({display:'block'}); $(this).on("click",function(){ $(">.tab-head >*",that).removeClass('current'); $(this).addClass("current"); $(">.tab-body > *",that).css({display:'none'}); $(">.tab-body > *:eq("+index+")",that).css({display:'block'}) that.attr("index",i); tab_page_nav(); }) }); }); var hash = window.location.hash; var re = /#tab(-(\d+))+$/i; if(re.test(hash)){ var num = hash.match(/\d+/g); var len = num.length; for(var i=0;i<len;i++) tabs_select(i,num[i]); tab_page_nav(); } } function tab_page_nav(){ var hash = '#tab'; $(".tab").each(function(){ hash += '-'+$(this).attr("index"); }); $(".page-nav a").each(function(){ if($(this).attr('href')!='javascript:;' && $(this).attr('href')!='#'){ var href = $(this).attr("href"); href = href.replace(/#(.+)$/i,'')+hash; $(this).attr("href",href); }else{ var onclick = $(this).attr("onclick"); if(onclick!=undefined){ onclick = onclick.replace(/(\+*\"#(.+)\")?;$/i,'+')+'\"'+hash+'\";'; $(this).attr("onclick",onclick); } } }) } //tabs插件选择 function tabs_select(num,index){ var that = $(".tab:eq("+num+")"); that.attr("index",index); $(">.tab-head >*",that).each(function(i){ if(i!=index)$(this).removeClass('current'); else $(this).addClass('current'); $(">.tab-body > *",that).css({display:'none'}); $(">.tab-body > *:eq("+index+")",that).css({display:'block'}); }); } $(document).ready(function(){ tabs_init(); }); //tools function tools_select(name,obj){ //var obj=document.elementFromPoint(event.clientX,event.clientY); $('input[name=\''+name+'\']').attr('checked',$(obj).hasClass('icon-checkbox-unchecked')); $(obj).toggleClass('icon-checkbox-unchecked'); return false; } //工具栏提交 function tools_submit(obj){ var form = $('form:first'); var confirm_flag = false; if(obj!=undefined){ if(obj['form']!=undefined) form = $(obj['form']); if(obj['action']!=undefined)form.attr('action',obj['action']); if(obj['method']!=undefined){ if(obj['method']=='get' || obj['method']=='post'){ form.attr('method',obj['method']); } else form.attr('method','post'); } else form.attr('method','post'); if(form.attr('method')=='get'){ var pattern = /(\w+)=(\w+)/ig; var parames = {}; obj['action'].replace(pattern, function(a, b, c){parames[b] = c;}); for(par in parames)form.append("<input type='hidden' name='"+par+"' value='"+parames[par]+"'>"); } if(obj['msg']!=undefined) confirm_flag = true; } if(confirm_flag){ var select_id = "id"; if(obj['select_id']!=undefined) select_id = obj['select_id']; art.dialog.confirm('你确认删除操作?', function(){ if($("input[name='"+select_id+"[]']:checked").size()>0)form.submit(); else art.dialog.tips("<p class='warning'>没有选择任何项目,无法删除</p>"); }); }else{ form.submit(); } return false; } //刷新 function tools_reload(){ location.reload(); } //提交前咨询 function confirm_action(url,msg){ if(msg==undefined) msg = '你确认删除操作吗?删除后无法恢复!'; art.dialog.confirm(msg, function(){ window.location.href = url; }); } //数组的笛卡尔积 function descartes(args){ //var args = Array.prototype.slice.apply(arguments); if(args==undefined) return null; var len = args.length; if(len == 1) return args[0]; else{ var tem = new Array(); tem = group(args[0],args[1]); for(var i=2;i<len;i++){ tem = group(tem,args[i]); } var result = new Array(); var tem_len = tem.length; num = 0; for(var i=0;i<tem_len;i++){ result[num++] = tem[i].split('*#*'); } return result; } function group (m,n){ var tem = new Array(); var num = 0; for(var i=0;i<m.length;i++){ for(var j=0;j<n.length;j++){ tem[num++] =m[i]+'*#*'+n[j]; } } return tem; } } // 无限级连动插件 (function($){ $.fn.Linkage = function(o){ o = $.extend({url:'',selects:['#province','#city','#county'],selected:['0','0','0']}, o || {}); var url = o.url; var arrNodeChild = new Array(); var arrSelect = o.selected; var options = new Array(); $.each(arrSelect,function(i){ options[i] = ''; }); //请求格式化后的JSON数据 $.post(o.url,function(data){ $.each(data, function(i, n){ var selected = (n.id == arrSelect[0]) ? 'selected="selected"' : ''; options[0] += '<option value="' + n.id + '" ' + selected + '>' + n.title + '</option>'; arrNodeChild[i] = n.child; if(n.child !== null) parse(n,0); }); $.each(o.selects,function(i,em){ $(em).append(options[i]); }) },"json"); //解析每一层元素 function parse(data,num){ if(data.child !==undefined && data.child !== null) { $.each(data.child, function(i, n) { if(data.id == arrSelect[num]) { var selected = (n.id == arrSelect[num+1]) ? 'selected="selected"' : ''; options[num+1] += '<option value="' + n.id + '" ' + selected + '>' + n.title + '</option>'; } arrNodeChild[i] = n.child; if(n.child !== null) parse(n,num+1); }); } } //逐级绑定连动事件 var len = o.selects.length; $.each(o.selects,function(i,em){ $(em).change(function(){ var val = 'o_'+$(this).val(); if(arrNodeChild[val] !== null && i<len-1) { for(var j=i+1 ; j<len ;j++){ var option = $(o.selects[j]).children().first(); if(option.val()==0)$(o.selects[j]).empty().append(option); else $(o.selects[j]).empty().append("<option value='0'>请选择</option>"); } if(val != 0){ var select = ''; $.each(arrNodeChild[val], function(k, n) { select += '<option value="' + n.id + '">' + n.title + '</option>'; }); $(o.selects[i+1]).append(select); } } if(typeof(o.callback) == 'function'){ var selected =new Array(); value =new Array(); text = new Array(); $.each(o.selects,function(i,em){ value[i] = $(em).val(); text[i] = $('option:selected',$(em)).text(); }); selected[0] = value; selected[1] = text; o.callback(selected); } }); }); }; })(jQuery); // 高级筛选插件 // 此插件必需与artdialog联合使用 // author webning (function($){ $.fn.Condition = function(o){ o = $.extend({data:[],okVal:'保存'}, o || {}); var fields_select = ""; if(o.data!=undefined){ var data = o.data; for(i in data){ fields_select += "<option value='"+i+"'>"+data[i]['name']+"</option>"; } } if(fields_select!='')fields_select = "<select><option value='noselect'>添加筛选字段</option>"+fields_select+"</select>"; art.dialog({id:'conditionDialog',title:'高级查询',padding:"6px",fixed: true,resize: false,content:'<div id="condition_dialog" style="width:600px; height:336px; " ><div class="tools_bar clearfix"> <span class="icon-plus fl"> '+fields_select+'</span> </div><div style="overflow: auto;width:600px; height:250px;"><table id="condition_table" class="default form2"><tr><th width="80">关系</th><th>字段名称</th><th width="100">比较关系</th><th>比较值</th><th width="60">操作</th></tr></table></div><div class="tc mt10"><a href="javascript:;" class="button" id="condition_create">'+o.okVal+'</a></div></div>'}); //检测表达式 function check_condition(condition) { var reg = /^(\S+--\S+--\S+--\S+__)*(\S+--\S+--\S+--\S+)$/i; return reg.test(condition); } if(o.input!=undefined){ var ini_data = $(o.input).val(); if(ini_data!='' && check_condition(ini_data)){ ini_data = ini_data.split('__'); for(var i in ini_data){ var value = ''; var item = ini_data[i].split('--'); if(o.data[item[1]]!=undefined) { if(o.data[item[1]]['values']!=undefined){ var values = o.data[item[1]]['values']; for(var k in values){ if(k==item[3]) value += "<option value='"+k+"' selected='selected'>"+values[k]+"</option>"; else value += "<option value='"+k+"' >"+values[k]+"</option>"; } if(value!='') value = "<select>"+value+"</select>"; } if(value=='') value = "<input value='"+item[3]+"'/>"; var str = '<tr><td><select><option value="and">并且</option><option value="or">或者</option></select></td><td><input type="hidden" value="'+item[1]+'">'+o.data[item[1]]['name']+'</td><td><select> <option value="eq"> = </option> <option value="ne"> != </option> <option value="lt"> < </option> <option value="le"> <= </option> <option value="gt"> > </option> <option value="ge"> >= </option> <option value="ct">包含</option> <option value="nct">不包含</option> </select></td><td>'+value+'</td><td><a class="icon-close" href="javascript:;"> 删除</a></td></tr>'; var reg = new RegExp('(value=\\"'+item[0]+'\\")',"i"); str = str.replace(reg,'$1 selected="selected"'); var reg = new RegExp('(value=\\"'+item[2]+'\\")',"i"); str = str.replace(reg,'$1 selected="selected"'); $("#condition_table").append(str); } } bindEvent(); } } //添加事件的绑定 $("#condition_dialog .icon-plus select").on("change",function(){ var current = $(this).find("option:selected"); var value = '';//'<input value=""/>';43 if(o.data[current.val()]['values']!=undefined){ var values = o.data[current.val()]['values']; for(var i in values){ value += "<option value='"+i+"'>"+values[i]+"</option>"; } if(value!='') value = "<select>"+value+"</select>"; } if(value=='') value = "<input value=''/>"; if(current.val()!='noselect'){ $("#condition_table").append('<tr><td><select><option value="and">并且</option><option value="or">或者</option></select></td><td><input type="hidden" value="'+current.val()+'">'+current.text()+'</td><td><select> <option value="eq"> = </option> <option value="ne"> != </option> <option value="lt"> < </option> <option value="le"> <= </option> <option value="gt"> > </option> <option value="ge"> >= </option> <option value="ct">包含</option> <option value="nct">不包含</option> </select></td><td>'+value+'</td><td><a class="icon-close" href="javascript:;"> 删除</a></td></tr>'); bindEvent(); } $(this).val('');//重置select }) $("#condition_create").on("click",function(){ var con = ''; $("#condition_table tr:has(td)").each(function(i){ var item = $("select,input",$(this)); var str = item.eq(0).val()+'--'+item.eq(1).val()+'--'+item.eq(2).val()+'--'+item.eq(3).val()+'__'; if(item.eq(3).val()!='' && con.indexOf(str)==-1)con += str; }); con = con.replace(/__$/g,''); if(o.input!=undefined){ if(con!=''){ $(o.input).val(con); art.dialog({id:'conditionDialog'}).close(); art.dialog.tips("<p class='success'>筛选条件保存成功!('关系值'为空的选项自动忽略)</p>"); if(o.callback != undefined) o.callback(con); } else{ art.dialog.tips("<p class='warning'>所有【关系值】为空,筛选无效!</p>"); } } }) //操作按钮事件绑定 function bindEvent(){ $("#condition_dialog .icon-close").off(); $("#condition_dialog table .icon-close").on("click",function(){ $(this).parent().parent().remove(); }); } bindEvent(); }; })(jQuery); //滑过菜单 //author webning //version 1.0 function initOperat(){ $(".operat").each(function(){ var operat = $(this); operat.find(".action").on("mouseenter DOMNodeInserted",function(){ operat.removeClass("hidden").addClass("show_munu"); var offset = operat.offset(); var height = operat.find(".action").height(); var action_width = operat.find(".action").outerWidth(); var menu_select_width = operat.find(".menu_select").outerWidth(); if(offset.top+operat.find(".menu_select").height()+height < $(window).height()){ if(offset.left+menu_select_width< $(window).outerWidth()) operat.find(".menu_select").offset({left:offset.left,top:(Math.floor(offset.top)+1+height)}); else operat.find(".menu_select").offset({left:(offset.left+action_width-menu_select_width),top:(Math.floor(offset.top)+1+height)}); operat.find(".action").removeClass("top").addClass("bottom"); }else{ if(offset.left+menu_select_width< $(window).outerWidth()) operat.find(".menu_select").offset({left:offset.left,top:Math.ceil(offset.top)-1-operat.find(".menu_select").height()}); else operat.find(".menu_select").offset({left:(offset.left+action_width-menu_select_width),top:Math.ceil(offset.top)-1-operat.find(".menu_select").height()}); operat.find(".action").removeClass("bottom").addClass("top"); } }); operat.on("mouseleave",function(){ operat.removeClass("show_munu").addClass("hidden"); }) }) } (function($){ $.fn.scrollToTop = function(method){ var defaults = { duration : 300, // scroll duration is_fixed : true, // if false, all params below will be ignored top_blank : 100, // max height from top is_scrollstop : true, // use scroll stop event or not scrollstop_latency : 300, // latency for scroll stop event btm_position : 100 // for absolute position, valid for IE6- } var settings = {} /* publick methods */ var methods = { init : function(options){ settings = $.extend({}, defaults, options); /* special event 'scrollstop' */ if(settings.is_fixed && settings.is_scrollstop){ var uid = 'uid' + (+new Date()); $.event.special.scrollstop = { setup: function() { var timer; var handler = function(evt) { var _self = this; var _args = arguments; if (timer) { clearTimeout(timer); } timer = setTimeout( function(){ timer = null; evt.type = 'scrollstop'; $.event.handle.apply(_self, _args); }, settings.scrollstop_latency); }; $(this).bind('scroll', handler).data(uid, handler); }, teardown: function() { $(this).unbind('scroll', $(this).data(uid) ); } }; } return this.each(function(){ var $element = $(this), element = this; if(settings.is_fixed){ var scrollEvent = settings.is_scrollstop ? 'scrollstop' : 'scroll'; $(window).bind(scrollEvent,{elm : $element}, helpers.scrollToTop); $(window).trigger(scrollEvent, [$element]); } $element.click(function(){ $('body,html').animate({scrollTop:0},settings.duration); return false; }); }); } } /* private methods */ var helpers = { scrollToTop : function(event, param1){ var $elm = param1 ? param1 : event.data.elm; var winTop = $(window).scrollTop(); if(winTop > settings.top_blank){ //IE6 通过 hack来解决 $elm.fadeIn("400"); }else{ $elm.hide(); } } } if(methods[method]){ return methods[method].apply(this, Array.prototype.slice.call(arguments, 1)); } else if(typeof method === 'object' || !method){ return methods.init.apply(this, arguments); } else{ $.error( '[scrollToTop] : Method "' + method + '" does not exist'); } } })(jQuery); //此插件必需结合Tiny系统的框架定义的Ping JQuery插件 (function($){ //默认参数 $.fn.Paging = function(options){ var defaults = {url:null, params:{}, content:'',callback:function(){}}; var o = {}; var self = null; self = $(this); //对最原始模板的处理 var id = self.attr("id"); var content = $("#"+id).data("page-content-template"); if(content){ defaults.content = content; }else{ defaults.content = self.find(".page-content").html(); $("#"+id).data("page-content-template",defaults.content); } o = $.extend(defaults,options); getPage(1); //内部私有取得第几页 function getPage(page){ o.params = $.extend(o.params,{page:page}); var data = $.data(self, "page_"+page); if(data){ handle(data); if(typeof(o.callback)=="function") o.callback(); }else{ $.post(o.url,o.params,function(data){ $.data(self, "page_"+page, data); handle(data); if(typeof(o.callback)=="function") o.callback(); },"json"); } } //处理数据 function handle(data){ if(data['status']=='success'){ self.find(".page-content").html(rander(data['data'])); self.find(".page-nav").html(data['html']); self.find(".page-nav a").each(function(){ $(this).on("click",function(){ var index = parseInt($(this).attr("page-index")); getPage(index); }) }) } } //数据渲染 function rander (data){ var str = ''; if(typeof data=="object"){ var num = 1; for(var i in data){ data[i]['odd-even'] = "odd"; if(num++%2==0)data[i]['odd-even'] = "even"; str += o.content.replace(/{\s*([^}]+)\s*}/ig,function(s0,s1){ var tem = s1.split("|"); if(tem.length==2){ return data[i][tem[0]] || tem[1]; } else if(tem.length>2){ if(data[i][tem[0]]) return tem[1]; else return tem[2]; } return data[i][s1] || ''; }); } } return str; } } })(jQuery); //倒计时 (function($){ $.fn.countdown = function(options){ var self = this; var defaults = {id:'countdown',end_time:"2020-12-31 23:59:59",format:'{d}天 {h}小时{m}分{s}.{mi}秒',callback:function(){}}; var o = $.extend(defaults, options); function runTime(){ var endtime=new Date(o.end_time); var nowtime = new Date(); var time = (endtime.getTime()-nowtime.getTime()); var leftsecond=parseInt(time/1000); if(leftsecond<0){leftsecond=0;time=0;} __d=parseInt(leftsecond/3600/24); __h=parseInt((leftsecond/3600)%24); __m=parseInt((leftsecond/60)%60); __s=parseInt(leftsecond%60); __mi=parseInt(time/100%10); __d = __d<10?'0'+__d:__d; __h = __h<10?'0'+__h:__h; __m = __m<10?'0'+__m:__m; __s = __s<10?'0'+__s:__s; var date = {d:__d,h:__h,m:__m,s:__s,mi:__mi}; var str = o.format.replace(/{\s*([^}]+)\s*}/ig,function(s0,s1){return date[s1];}); self.html(str); if(leftsecond>0)setTimeout(runTime,100); else{o.callback();} } runTime(); } })(jQuery); //加载完成后处理事件 $(document).ready(function(){ initOperat(); setTimeout(function(){ $("#message-bar").fadeOut(); },2000); });